home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / node_pq.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  1.9 KB  |  75 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  node_pq.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_NODE_PQ_H
  16. #define LEDA_NODE_PQ_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // node priority queues
  20. //------------------------------------------------------------------------------
  21.  
  22. #include <LEDA/graph.h>
  23. #include <LEDA/impl/bin_heap.h>
  24.  
  25.  
  26. #define PRIO_IMPL bin_heap
  27. #define PRIO_ITEM bin_heap_item
  28.  
  29. template <class itype>
  30.  
  31. class _CLASSTYPE node_pq : private PRIO_IMPL
  32. {
  33.  
  34. int cmp(GenPtr x, GenPtr y)  const
  35.                          { return compare(ACCESS(itype,x),ACCESS(itype,y)); }
  36. void print_key(GenPtr x)    const { Print(ACCESS(itype,x)); }
  37. void print_inf(GenPtr x)    const { Print(GenPtr(x));  }
  38. void clear_key(GenPtr& x)   const { Clear(ACCESS(itype,x)); }
  39. void copy_key(GenPtr& x)    const { x=Copy(ACCESS(itype,x));  }
  40.  
  41. int  int_type()             const { return INT_TYPE(itype); }
  42.  
  43. public:
  44.  node_pq(const graph&) { }
  45. ~node_pq()             { clear(); }
  46.  
  47. void decrease_inf(node v, itype i)
  48. { PRIO_IMPL::decrease_key(PRIO_ITEM(v->data[1]),Convert(i)); }
  49.  
  50. void insert(node v,itype i)
  51. { v->data[1] = PRIO_IMPL::insert(Convert(i),v);}
  52.  
  53. itype inf(node v) const
  54. { return ACCESS(itype,PRIO_IMPL::key((PRIO_ITEM)v->data[1])); }
  55.  
  56. void del(node v) 
  57. { PRIO_IMPL::del_item(PRIO_ITEM(v->data[1])); }
  58.  
  59. node find_min() const  
  60. { return (node)PRIO_IMPL::inf(PRIO_IMPL::find_min());   }
  61.  
  62. node del_min()   
  63. { node v = find_min(); PRIO_IMPL::del_min(); return v; }
  64.  
  65. void clear()     { PRIO_IMPL::clear(); }
  66.  
  67. int size()   const { return PRIO_IMPL::size(); }
  68. int empty()  const { return PRIO_IMPL::empty(); }
  69.  
  70. };
  71.  
  72.  
  73. #endif
  74.